package cn.com.anypay.manager.miaoma.suantaiqrcode.dto;

import lombok.Data;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Builder;

import java.util.Map;

/**
 * 二维码网关响应数据传输对象
 * 专为前端网关页面设计，提供结构化的数据格式
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class QrCodeGatewayResponse {

    /**
     * 二维码ID
     */
    private String qrCodeId;

    /**
     * 二维码名称
     */
    private String qrCodeName;

    /**
     * 二维码类型
     */
    private Integer qrCodeType;

    /**
     * 二维码类型名称
     */
    private String qrCodeTypeName;

    /**
     * 处理动作类型
     * redirect: 直接跳转
     * display: 显示内容（图片、文本、小程序码等）
     * download: 文件下载
     */
    private String action;

    /**
     * 重定向URL（当action为redirect时使用）
     */
    private String redirectUrl;

    /**
     * 显示数据（当action为display时使用）
     */
    private DisplayData displayData;

    /**
     * 显示数据内部类
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class DisplayData {
        /**
         * 显示类型
         * image: 图片
         * text: 文本
         * miniprogram: 小程序码
         * html: HTML内容
         */
        private String type;

        /**
         * 主要内容
         * - 对于image类型：图片URL
         * - 对于text类型：文本内容
         * - 对于miniprogram类型：小程序码图片URL
         * - 对于html类型：HTML字符串
         */
        private String content;

        /**
         * 标题
         */
        private String title;

        /**
         * 描述
         */
        private String description;

        /**
         * 附加元数据
         */
        private Map<String, Object> metadata;
    }

    /**
     * 动作类型常量
     */
    public static class ActionType {
        public static final String REDIRECT = "redirect";
        public static final String DISPLAY = "display";
        public static final String DOWNLOAD = "download";
    }

    /**
     * 显示类型常量
     */
    public static class DisplayType {
        public static final String IMAGE = "image";
        public static final String TEXT = "text";
        public static final String MINI_PROGRAM = "miniprogram";
        public static final String HTML = "html";
    }
}